package com.jzo2o.market.service;

import com.jzo2o.api.market.dto.request.CouponUseReqDTO;
import com.jzo2o.api.market.dto.response.AvailableCouponsResDTO;
import com.jzo2o.api.market.dto.response.CouponUseResDTO;
import com.jzo2o.common.model.PageResult;
import com.jzo2o.market.model.domain.Coupon;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jzo2o.market.model.dto.request.CouponOperationPageQueryReqDTO;
import com.jzo2o.market.model.dto.response.CouponInfoResDTO;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author itcast
 * @since 2023-09-16
 */
public interface ICouponService extends IService<Coupon> {

	/**
	 * 运营端查询同一个活动的优惠券
	 *
	 * @param couponOperationPageQueryReqDTO 查询条件
	 * @return 优惠券列表
	 */
	PageResult<CouponInfoResDTO> queryForPageOfOperation(CouponOperationPageQueryReqDTO couponOperationPageQueryReqDTO);

	/**
	 * 滚动查询用户优惠券列表
	 *
	 * @param lastId 上一批查询最后一条优惠券的id
	 * @param userId 查询用户的id
	 * @param status 优惠券状态
	 * @return 优惠券列表
	 */
	List<CouponInfoResDTO> queryForList(Long lastId, Long userId, Integer status);

	/**
	 * 作废指定活动未使用的优惠券
	 *
	 * @param activityId 活动id
	 */
	void revoke(Long activityId);

	/**
	 * 统计获取优惠券领取数量
	 *
	 * @param activityId 活动id
	 * @return 优惠券领取数量
	 */
	Integer countReceiveNumByActivityId(Long activityId);

	/**
	 * 过期优惠券处理
	 */
	void processExpireCoupon();

	/**
	 * 领取优惠券
	 *
	 * @return:
	 * @param: activityId 活动id
	 */
	void seizeCoupon(Long activityId);

	/**
	 * 新增优惠券领取记录，并更新活动库存
	 *
	 * @param userId     领取人id
	 * @param activityId 活动id
	 * @return:
	 */
	void addCouponReceiveRecord(Long userId, Long activityId);

	/**
	 * 获取可用的优惠券列表
	 *
	 * @return:
	 * @param:
	 */
	List<AvailableCouponsResDTO> getAvailableCoupons(BigDecimal totalAmount);

	/**
	 * 使用优惠券
	 * 
	 * @return: 
	 * @param: 
	 */
	CouponUseResDTO useCoupon(CouponUseReqDTO couponUseReqDTO);
}
